home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -in_the_mag- / emulation / amiga / uae-0.7.0b2 / src / missing.c < prev    next >
C/C++ Source or Header  |  1998-01-20  |  2KB  |  95 lines

  1.  /*
  2.   * UAE - The Un*x Amiga Emulator
  3.   *
  4.   * Various stuff missing in some OSes.
  5.   *
  6.   * Copyright 1997 Bernd Schmidt
  7.   */
  8.  
  9. #include "sysconfig.h"
  10. #include "sysdeps.h"
  11.  
  12. #include "config.h"
  13. #include "options.h"
  14. #include "uae.h"
  15.  
  16. #ifdef __BEOS__
  17. int access(const char *name, int mode)
  18. {
  19.     struct stat statbuf;
  20.  
  21.     if (-1 == stat(name, &statbuf))
  22.     return -1;
  23.  
  24.     if(mode&R_OK)
  25.     if(statbuf.st_mode&S_IRUSR)
  26.         return 0;
  27.     if(mode&W_OK)
  28.     if(statbuf.st_mode&S_IWUSR)
  29.         return 0;
  30.     return -1;
  31. }
  32. #endif
  33.  
  34. #ifndef HAVE_STRDUP
  35.  
  36. char *my_strdup (const char *s)
  37. {
  38.     /* The casts to char * are there to shut up the compiler on HPUX */
  39.     char *x = (char*)xmalloc(strlen((char *)s) + 1);
  40.     strcpy(x, (char *)s);
  41.     return x;
  42. }
  43.  
  44. #endif
  45.  
  46. #ifndef HAVE_GETOPT
  47.  
  48. /* This isn't a complete getopt, but it's good enough for UAE. */
  49. char *optarg;
  50. int optind = 0;
  51.  
  52. int getopt (int argc, char *const *argv, const char *str)
  53. {
  54.     char *p, c;
  55.  
  56.     if (optind == 0)
  57.     optind = 1;
  58.     for (;;) {
  59.     while (optind < argc && (argv[optind][0] != '-' || argv[optind][1] == '\0'))
  60.         optind++;
  61.     if (optind >= argc)
  62.         return EOF;
  63.     p = strchr (str, c = argv[optind][1]);
  64.     if (p == 0) {
  65.         sprintf (warning_buffer, "Commandline parsing error - invalid option \"-%c\".\n", argv[optind][1]);
  66.         write_log (warning_buffer);
  67.         optind++;
  68.         continue;
  69.     }
  70.     break;
  71.     }
  72.     if (*(p+1) == ':') {
  73.     if (argv[optind][2] == '\0') {
  74.         optarg = argv[optind + 1];
  75.         optind++;
  76.     } else {
  77.         optarg = argv[optind] + 2;
  78.     }
  79.     }
  80.     optind++;
  81.     return c;
  82. }
  83.  
  84. #endif
  85.  
  86. void *xmalloc(size_t n)
  87. {
  88.     void *a = malloc (n);
  89.     if (a == NULL) {
  90.     write_log ("virtual memory exhausted\n");
  91.     abort();
  92.     }
  93.     return a;
  94. }
  95.